/// @description 随机生成地图
// You can write your code in this editor
if(keyboard_check_pressed(vk_enter))
{
	#region 地图初始化
		map_stamp_number=0;
		//将显示地图全部栅格初始化为墙体
		ds_grid_clear(map_show_grid_,WALL);
		//将标记地图初始化为未标记
		ds_grid_clear(map_stamp_grid_,0);
		//清除上一次绘制的图块集
		tilemap_clear(tilemap_floor, 0);
		tilemap_clear(tilemap_wall, 0);
		tilemap_clear(tilemap_col, 0);
		//清除路径中和运动规划网格中的点
		path_clear_points(path_id);
		mp_grid_clear_all(path_map_path_id);
		//将显示地图奇数位栅格全部设置为地面
		for(var i=1;i<MAP_SHOW_WIDTH;i++)
		{
			for(var j=1;j<MAP_SHOW_HEIGHT;j++)
			{
				if((i mod 2)&&(j mod 2)) map_show_grid_[# i,j]=FLOOR;
			}
		}
	#endregion
	
	#region 设置出入口
		randomize();
		var _random_dir=random(1);//随机选择出入口为上下两侧还是左右两侧
		var _random_inout=random(1);//随机选择出入口分别位于哪一侧
		if(_random_dir)//上下两侧
		{
			var _inx_no=irandom_range(1,MAP_STAMP_WIDTH);//相当于是第几个可选择的入口
			var _inx=_inx_no*2-1;
			var _outx_no=irandom_range(1,MAP_STAMP_WIDTH);//相当于是第几个可选择的出口
			var _outx=_outx_no*2-1;
			if(_random_inout)//入口在上侧，出口在下侧
			{
				var _iny=0;
				var _outy=MAP_SHOW_HEIGHT-1;
			}else//入口在下侧
			{
				var _iny=MAP_SHOW_HEIGHT-1;
				var _outy=0;
			}
		}else//左右两侧
		{
			var _iny_no=irandom_range(1,MAP_STAMP_HEIGHT);
			var _iny=_iny_no*2-1;
			var _outy_no=irandom_range(1,MAP_STAMP_HEIGHT);
			var _outy=_outy_no*2-1;
			if(_random_inout)//入口在左侧，出口在右侧
			{
				var _inx=0;
				var _outx=MAP_SHOW_WIDTH-1;				
			}else//入口在右侧，出口在左侧
			{
				var _inx=MAP_SHOW_WIDTH-1;
				var _outx=0;
			}
		}
		map_show_grid_[# _inx,_iny]=FLOOR;
		map_show_grid_[# _outx,_outy]=FLOOR;
		global.mazeInX = _inx * CELL_WIDTH + 8;
		global.mazeInY = _iny * CELL_HEIGHT + 8;
		global.mazeOutX = _outx * CELL_WIDTH;
		global.mazeOutY = _outy * CELL_HEIGHT;
		//instance_create_depth(_inx * CELL_WIDTH + 8, _iny * CELL_HEIGHT + 8, -1, oSlime);	
		with(oPlayer)
		{
			x = global.mazeInX;
			y = global.mazeInY;
		}
		with(instance_create_depth(global.mazeOutX, global.mazeOutY,depth -1, oRoomExit))
		{
			targetRoom = rVillage;
			targetX = 280;
			targetY = 98;
		}
	#endregion

	#region 地图计算
	
		//生成房间
		scr_create_room();
		scr_room_door();//为房间生成门
		//scr_create_maze(0,0);
		//遍历未标记的
		var _ix=0;
		var _jy=0;
		var _end=0;
		do
		{
			for(var _i=0;_i<MAP_STAMP_WIDTH;_i++)
			{
				for(var _j=0;_j<MAP_STAMP_HEIGHT;_j++)
				{
					if(!map_stamp_grid_[# _i,_j])//如果该标记网格没有被标记
					{
						_ix=_i;
						_jy=_j;
						_end=1;
						break;
					}
				}
				if(_end)break;
			}
			scr_create_maze(_ix,_jy);
			_end=0;
		}until(map_stamp_number==MAP_STAMP_HEIGHT*MAP_STAMP_WIDTH);
		
		with(obj_mask)instance_destroy();
		scr_fill_path();
		
	#endregion
	
	#region 绘制地图
		for(var i=0;i<MAP_SHOW_WIDTH;i++)
		{
			for(var j=0;j<MAP_SHOW_HEIGHT;j++)
			{
				if(map_show_grid_[# i,j]==WALL)
				{
					tilemap_set(tilemap_wall,1,i,j);
					tilemap_set(tilemap_col,1,i,j);
					mp_grid_add_cell(path_map_path_id,i,j);//添加路径中不碰撞的栅格
					
				}
				else if(map_show_grid_[# i,j]==FLOOR)
				{
					tilemap_set(tilemap_floor,1,i,j);
					if(random(10) >= 9)
					{
						instance_create_depth(i * CELL_WIDTH + 8, j * CELL_HEIGHT + 8, -1, oSlime);	
					}
				}
			}
		}
	#endregion
	
	#region A星寻路
		mp_grid_path(path_map_path_id,path_id,_inx*16+16,_iny*16+16,_outx*16+16,_outy*16+16,0);
	#endregion
}